package cn.com.git.example.common.base;

import cn.com.git.example.common.util.lock.LockFactory;
import cn.com.git.example.config.security.LoginContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.function.Supplier;

/**
 * @author zhangzhenfu
 * @Description
 * @date 2020/4/4 0004 16:30
 */
@Slf4j
public abstract class BaseApi {
    @Autowired
    protected LoginContext loginContext;

    /**
     * 锁，防止接口重复调用
     * @param key
     * @param sup
     * @param <T>
     * @return
     */
    protected <T> T lock(String key,Supplier<T> sup){
        //单例的时候，可以使用这种加锁方式
        //如果api为负载均衡模式，则需要使用redis作为锁的载体
        return LockFactory.builder(key,sup);
    }
}
